#include "module_enumerator.h"

namespace windows
{

module_enumerator::module_enumerator() noexcept : process_snapshot(::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()))
{
}

std::optional<MODULEENTRY32> module_enumerator::first() const noexcept
{
    MODULEENTRY32 module_entry{sizeof(MODULEENTRY32)};
    if (Module32First(process_snapshot, &module_entry))
        return module_entry;

    return std::nullopt;
}

std::optional<MODULEENTRY32> module_enumerator::next() const noexcept
{
    MODULEENTRY32 module_entry{sizeof(MODULEENTRY32)};
    if (Module32Next(process_snapshot, &module_entry))
        return module_entry;

    return std::nullopt;
}

} // namespace windows
